package tulingxueyuan117;

import java.lang.reflect.Type;

/**
 * Author: Zhang Dongwei
 * Date: 2022/11/25 14:27
 * 给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和并同样以字符串形式返回。
 *
 * 你不能使用任何內建的用于处理大整数的库（比如 BigInteger）， 也不能直接将输入的字符串转换为整数形式。
 */
public class p53_字符串相加_415 {
    public static void main(String[] args) {
        String num1 = "9333852702227987", num2 = "85731737104263";
        System.out.println(addStrings(num1, num2));
    }

//    有问题
    public static String addStrings1(String num1, String num2) {
        long res = 0;
        long res1 = 0;
        for (int i = num1.length()-1, j = 0; i >=0; i--, j++){
            char n = num1.charAt(i);
            res += (n-48)*(Math.pow(10, j));
        }
        System.out.println(res);
        for (int i = num2.length()-1, j = 0; i >=0; i--, j++){
            char n = num2.charAt(i);
            res1 += (n-48)*(Math.pow(10, j));
        }
        System.out.println(res1);
        return res+res1+"";
    }

//    视频解答
    public static String addStrings(String num1, String num2) {
        StringBuilder sb = new StringBuilder();
        int carry = 0; // 记录进位的变量
        for (int i = num1.length()-1, j = num2.length()-1; i>=0 || j>=0 || carry == 1; i--, j--){
            int x = 0, y = 0;
            if (i < 0) x = 0;
            else x = num1.charAt(i)-'0';
            if (j < 0) y = 0;
            else y = num2.charAt(j) - '0';
            sb.append((x+y+carry)%10);
            carry = (x+y+carry)/10;
            System.out.println(sb);
        }
        return sb.reverse().toString();
    }
}
